!CPC - The full version

If you haven't read this, please do so now.


New!

  • 1996-12-07 15:00
    Please take note of my new and now reconfirmed contact details, which have changed yet again!
  • 1996-11-24 16:00
    Development multitasking version of !CPC_Src
  • 1996-08-05 18:00
    Easier-to-install version of the frontend
  • 1996-07-28 19:00
    New version of !CPC!
  • 1996-05-30 10:45
    Try the new games list (it is already somewhat out-of-date, but still much better than the old one!)
  • 1996-02-07 20:00
    !CPC is mentioned in this month's Computer Shopper!
  • 1996-02-05 16:00
    !CPC's Z80 emulation has been validated by a Z80 instruction exerciser.
  • 1996-01-31 18:30
    !CPCFront now available for the full version of !CPC.

  • CONDITIONS OF USE

    In the following, !CPC refers to all the files in both the assembled version and the source version, as made available on this page, excluding the ROM images mentioned below.

    !CPC is Copyright (C) 1996 Mark RISON.

    The BASIC and OS ROM images are copyright Amstrad and Locomotive Software, and are distributed with their kind permission.

    The AMSDOS ROM image is copyright Amstrad and Digital Research (Novell), and is distributed with their kind permission (well, Amstrad's at least...).

    The FrontEnd module is copyright Acorn, and is distributed with their kind permission.

    BASIC, OS and AMSDOS ROM images may be distributed together with !CPC, purely for your convenience. These ROM images do not form an integral part of !CPC. They may be freely obtained from the demo version of !CPC, irrespective of whether you choose to obtain the full version of !CPC. Any contribution you choose to make towards !CPC should be construed as a contribution towards the emulator code, not towards the end-product.

    You may not make !CPC available to third parties. This includes passing copies on to acquaintances, downloading to FTP sites/BBSs, adding to PD/shareware libraries and copying to CD. You may not make any ARM executables obtained by running !CPC available to third parties, though you may use them yourself. You may not make any modified versions of !CPC available to third parties, though you may use them yourself. If you come up with useful modifications, please contact me!

    By downloading the software you are deemed to have accepted these conditions. Please note all transfers are logged.

    No guarantees of any kind are made concerning operation of !CPC. It has been tested on an 4 MB A440/1 with ARM3/25. It will probably not work with only 1 MB.


    Development multitasking !CPC_Src

    At long last I'm breaking radio (sic) silence to bring you a new version of !CPC! Well, to be precise, a new version of !CPC_Src. The main new thing is multitasking. A subsidiary new thing is Sinclair ZX81 emulation.

    Here's the bad news, though, first. I've both, by some truly amazing miracle, managed to get a Ph.D. and to get a job. Not any old job, either: a job at Acorn Risc Technologies! This doesn't sound like bad news? Well, it is, if you are an enthusiastic !CPC user, because it means that !CPC development may be at an end.

    It is not clear yet whether under the terms of my contract I will be allowed to continue !CPC development. And even if this were so, it's quite possible that the last thing I'll want to be doing in my spare time is more playing with computers! So it's not all that rosy.

    A half-baked plan I have in mind would be to pass on !CPC to some other enthusiast, who could emself take it to heights beyond its users' wildest dreams. Do you sound like that person? If so, please do get in touch. I make no guarantees -- I may both be allowed to continue !CPC development and find myself irresistibly attracted to Acorn RISC OS boxes day and night -- but do think about it!

    Well, that's the bad news over. Oh, no, it isn't. There's one thing left. This version of !CPC_Src is very much a development version -- and there's no pre-assembled !CPC; I thought releasing something was better than releasing nothing. I haven't been able to get this release through the normal suite of critical quality assurance self-control which I normally put my releases through. So things may break in unexpected ways. Some funky configuration combinations may no longer work. Debugging info may suddenly get splatted onto your screen. Why, your monitor might even go up in flames! I'll try to mention most of the known problems below, but you've been warned to expect the unexpected!

    Right, then. You turn on multitasking support by setting CPC$Wimp to 1. Indeed, this is now the default. When this is used, !CPC_Src will take over the machine at start up, assembling itself, and then a window will appear. At this point things should be multitasking sweetly again. You can do lots of funky things with the window:

  • Give it the input focus by Select-clicking, or take the input focus away by Adjust-clicking (or giving another window the input focus)
  • Suspend emulation by Shift-Adjust-clicking, or restart by Shift-Select-clicking
  • Toggle between small and big sizes by clicking on the toggle size window icon
  • Pop up a menu with the above options, plus centering (useful when the title bar somehow goes off-screen!)
  • Drag SNAs/DSKs onto the window. These will be identified as such even if they don't have the right filetype (in which case they'll be retyped)
  • Double-click on SNAs/DSKs
  • When dragging/double-clicking a DSK, if you keep left-Alt pressed the DSK will be inserted in drive A, if right-Alt then drive B
  • When dragging/double-clicking a SNA, remember you can then restart the snap by using Alt-R
  • Most Alt-combinations should work as before, including Alt-E, Alt-A, Alt-B and Alt-X. Alt-I will open your disc directory, but this is only really intended for double-clicking from: attempting to e.g. delete may result in (hopefully harmless) errors
  • In multitasking mode debugging info will be splatted onto the top of the screen. Sorry.

    When in multitasking mode you can switch to singletasking mode using Alt-Tab. This will take you to singletasking mode, which will of course be considerably faster. You don't get any control over the screen mode: it's MODE 12. Sorry. Use Alt-Tab to get back to multitasking mode.

    Slowdown has been a bit neglected. Basically positive values of slowdown (i.e. IOC timer 1 timing) are deprecated; you should use negative values (i.e. self-timing). Zero won't work properly in multitasking mode. If you have a SA things are liable to be unusably fast with slowdown -1; you'll have to use bigger (sic) negative numbers -- but then things will get a bit sluggish under the desktop. It's not very satisfactory, I know. Sorry.

    You can now save screenshots without leaving the emulator, by using Alt-Print. This will by default dump them in the Screens subdirectory, numbering them. I'd have liked to allow the same functionality for saving snaps, but didn't have the time. Sorry.

    Keyboard handling has been overhauled. You should observe no user-level differences, except if you're using a German keyboard, in which case you should observe that e.g. Ctrl-Q produces @. If you're both a hacker and are dissatisfied with the provided layout, you can attempt to define a better one yourself. A file CPCKbdX should be present in Support; this defines the keyboard (i.e. the RISC OS key number to CPC key matrix mapping, 128 bytes in a clever format which you'll doubtless soon work out). A file CPCAlfX should be present in Support; this defines the alphabet (i.e. the CPC key number to CPC charcode mapping, 80 bytes for normal, then 80 for Shift and 80 for Ctrl). Have fun...

    You should only run one !CPC_Src at a time, unless you're ready to accept, er, interesting sound effects (and keyboard clashes, unless you make use of the suspend facility).

    For ZX81 emulation, set CPC$ZX to 81. It should work both in multitasking and singletasking modes, but I wouldn't try switching (so if you want singletasking mode, use CPC$Wimp 0). This has very many rough edges. In particular, there's some support for ZX81 hires (an amazing 256x192 in 2 colours!), but this is not perfect. If you're unlucky the emulator may crash. If you're very unlucky, this may take down the whole machine. If you're extremely unlucky, it could conceivably wipe your HD as well. Well, you've been warned. Even if you're not using hires, sometimes the screen may go into vibromode -- this is especially easy to do with FAST mode. Sorry.

    ZX81 files should be placed in a directory pointed to by ZXTape$Path (don't forget the trailing dot!). These should be in .P format. You load, well, by pressing J (LOAD) then Shift-P (") then the filename, then Shift-P again. If it all goes OK, fine. If not, you'll get an error Z/0, in true ZX81 style. You can save, too.

    The main source of ZX81 stuff is ftp://ftp.nvg.unit.no/pub/sinclair/zx81, though there are a few WWW sites around. If you've forgotten what the ZX81 keyboard looks like (how could you?), here it is. To make your life a bit easier, note that Ctrl will do Function (i.e. Shift-NewLine -- remember to release it before pressing the next key though), Tab will do Graphics (i.e. Shift-9), Delete will do Rubout (i.e. Shift-0) and Esc will do Break (i.e. Space). The arrow keys will do cursor movement (i.e. Shift-5/6/7/8).

    I've risked including a ZX81 ROM image with the release. It isn't clear who has the rights to the ZX81 ROM. If it's Amstrad, then I have their kind permission -- many thanks, Amstrad. If it's Sir Clive, then I don't. Er, please, Sir, I meant no harm, please forgive me, grovel, grovel...

    Miscellaneous: PseuDOS has an extra command |RELOC for relocating blocks of memory. I'm not sure whether freeze support still works properly -- gah, just use the multitasking version and Shift-Adjust! Non-PseuDOS errors should now be reported in lahvely Wimp error boxes -- even in singletasking mode! Debugging has been overhauled; if CPC$Debug is 0 you should never see debugging info on the screen in singletasking mode. Oh, and no frontend. Sorry.

    Well, that's it. Have fun!


    !CPC

    The latest version of !CPC is version 1996-07-28

    It improves on version 1996-05-30 in the following respects:

  • a new sound generator, with hardware envelope emulation
  • freeze support: you can suspend your CPC session and return to it later
  • improved RAM banking -- it's now relatively instantaneous
  • a memory access optimisation which speeds things up by about 15%
  • changes in the configuration of the default executable
  • an important bugfix in PSG (sound/keyboard) emulation
  • bugfixing for the exact-speed mode
  • support for PC-style (RPC) and German-layout keyboards
  • an overhauled frontend
  • miscellaneous other smallish improvements
  • The new sound generator replaces BBCSound. You should find some sounds sound better, or even that some new sounds or tunes can now be heard. If you think things sound worse than before, please tell me. I'm particularly interested to hear about performance with 16-bit sound systems.

    When you return to !CPC now, you're put back where you left things last time. If you want to start afresh, use Alt-Esc as usual. This feature consumes 128K, and you can disable it if you wish (see the "Config" document). Info about inserted discs and open PseuDOS files is preserved (don't e.g. close them or !CPC will get very confused!), but not e.g. mixed-mode or autofire status. You should not exit while discs are being accessed; wait until the program is quiescent. If you *RMKill CPCSupport all open files will be closed. Note that now, if you have double-clicked on a snap, and wish to reload the snap and try to get past that end-of-level monster again, you should use Alt-R rather than Alt-Esc which worked previously.

    RAM banking is now done by updating pointers rather than copying blocks of memory, so it's significantly faster. Even if you're not using banked RAM, using pointers turns out to speed things up a bit, so you just can't lose!

    Memory accesses are now optimised by assuming that if a memory fetch previously came from ROM, the next sequential one will too, and ditto for RAM. In other words, you don't have to constantly check whether every single memory access is from ROM or from RAM. This speeds things up by about 15%. It does, however, conceivably mean some programs using perverse memory access might fail. In testing, I've only found one program for which this is the case (a fix has been made to get around this). If you find something which used to work but doesn't now -- most likely a program using banked RAM -- please do tell me!

    The configuration options used to make !CPC from !CPC_Src have changed a bit. Self-pacing emulation is now the default, which means even an A310 can run Elite. This corresponds to negative values for slowdown; see the "Config" document. Neatscroll is now on, which means scrolling the screen will not occasionally `jump'. And, last but not least, enhanced mixed-mode support is now on, which means you can use it without playing around with !CPC_Src -- I've determined this hardly slows down most programs, and even in a pathological case slows things down by only about 5%. Note you can use big negative values of slowdown to slow the self-paced emulation down just like you could use big positive values to slow the timer-paced emulation down. In fact, !CPC will cope if you accidentally pass it a positive value!

    I've found and fixed a bug in the sound chip emulation, which meant some programs weren't getting sound right, and others weren't getting keyboard input right (keyboard handling is done by the sound chip on the CPC!). I've also found and fixed a conceptual implementation fault for exact-speed emulation (slowdown=0) -- note you need to use !CPC_Src if you want this.

    PC-style (RPC) and German-layout keyboards are now supported. If you've got a ZX81-style Mongolian-layout keyboard, tell me more, and I may be able to add support for it.

    !CPC's frontend has now been overhauled. I've taken development over from Nige Jones now -- thanks, Nige, for getting the ball rolling. Please do give me lots of feedback here. I think it should be self-explanatory in use. The only non-obvious thing is that you can set the printer output to go to a file either by dragging an existing file onto the printer name box, or by dragging the box to a filer window. Note I haven't yet overhauled the PseuDOS converter; carry on using !AmsToArc for the time being. Also the slowdown situation is a bit confusing: using !CPC only negative values for slowdown work (i.e. `self-paced emulation'), though positive values (i.e. `timer-paced emulation') will be accepted and treated as the corresponding negative values. If you want `exact-speed emulation' (corresponding to slowdown=0) you'll have to use !CPC_Src. Improving all this is on my `to do' list!

    To use the frontend, simply copy !CPC (the emulator) into the frontend (so you end up with !CPC (the emulator) inside !CPC (the frontend)). If you want to use the frontend for !CPC_Src, do the same thing, and edit the frontend's !Run and !Boot files as indicated therein. You can also rename the frontend to !CPC_Src to make it all pretty. I realise this is still a bit confusing, and would welcome ideas (should I, for example, simply always supply the emulators in a single package together with their frontend, even though this would increase the download sizes?).

    The other miscellaneous changes include showing the amount of free disc space for PseuDOS CATs, Alt-9/6 to move the mixed-mode boundary up/down by half a row, the removal of a few irrelevant Internal Errors, and ZX81 support. This last one is totally unsupported at the moment, I'll deny I ever mentioned it if challenged!

    As usual, download and enjoy. Please do give me some feedback, even if it's just to say !CPC is absolutely wonderful and you're always amazed I find things to improve...

    Version 1996-05-30

    It improves on version 1996-05-22 in the following respects:

  • disc swapping
  • extra mixed-mode functionality
  • a small change to PseuDOS file naming
  • miscellaneous bug-fixes
  • You can now use Alt-X to exchange the discs in drives A and B. So if a game comes on two sides, insert one in A and the other in B, and simply use Alt-X when prompted to insert the other side.

    You can now use Alt-0, Alt-1 and Alt-2 (all on the keypad) even when not using enhanced mixed-mode handling. You should now use Alt-. (keypad) rather than Alt-# to swap mixed-mode modes; this now also works even when not using enhanced mixed-mode handling.

    The mapping of the AMSDOS filename ^ (up arrow) character in PseuDOS filenames has been changed to ( (was /). This has been done to make it possible, should I ever attempt to do so, to allow files straight off an MSDOS disc to be read into !CPC. No converter is provided; if you have a filename with a ^ in it (I cannot believe anybody would in fact use this character in a filename!) simply rename it from the desktop so that the / in the filename is a ( instead.

    A message `Disc already inserted' rather than the possibly confusing `File open' will appear when you try to insert an already-inserted disc. A work-around for a possible RO3.5 bug related to sound handling, causing sound to be emitted after !CPC was quitted, has been introduced. A bug, introduced by the changes for self-timing emulation, in the Z80 emulation (LD A,R of all things!) has been fixed. You can actually save snaps in !CPC (why do I get this feeling no-one is actually using !CPC?). Plus a few other things which will go unnoticed.

    Version 1996-05-22

    It improves on version 1996-04-14 in the following respects:

  • much better disc handling
  • support for 128K snaps
  • new slowdown modes
  • better tape handling
  • better ROM handling
  • improved support utilities
  • miscellaneous fiddles
  • Two disc drives are now supported. You can now write to discs. You can eject discs with Alt-E or |EJECT. Alt-A and Alt-B select the drive to which insert/eject operations apply; if you want to use a specific drive there's also |INSERTA, |INSERTB, |EJECTA, |EJECTB. The much improved FDC emulation means that a number of programs which didn't use to work because they tried direct FDC access will now work. Remember that if CAT fails or produces garbage, the program is probably launched using |CPM.

    You can now load and save 128K snaps. 128K snaps are saved automatically if bank switching has been used by the program.

    There are two new slowdown modes. If slowdown is set to 0, then interrupts occur every 1/300s as usual, but the emulator counts instructions, and if it is running too fast, waits a bit at these interrupts. This only works properly on fast machines (with debug on you'll see exclamation marks if the machine is running too slowly for this to work). If slowdown is set to -1, the emulator counts instructions and works out when a real CPC would have interrupted. This makes programs run flat out and still respect all timing requirements as far as the program is concerned (so CP/M+ will even work on an ARM2/8!). Both of these self-timing modes only work with !CPC_Src. Slowdowns from 1 upwards work as before. Note that it is a known fact that running with slowdown set to -1 may under certain circumstances be slower than running with slowdown set to 1, and a few programs actually hang with self-timed emulation (Sentinel being a notable example).

    PseuDOS now supports 26 virtual drives, accessed by defining CPCDriveX$Path, where X is a letter from A to Z. By default, only A is defined (to the Tapes subdirectory), and attempts to select other drives (using |B or |DRIVE under PseuDOS, |TB or |TDRIVE under PseuTOS) will produce a `Bad drive' error. The format of PseuDOS filenames has also changed; the program should guide you through the steps necessary to convert your existing PseuDOS files, should you have any. The quick-launch scheme has been modified, for the benefit of you <filename> Ctrl-Up Ctrl-Enter freaks so that when PseuTOS rather than AMSDOS is active, Ctrl-Enter will only produce RUN" rather than RUN"<discname>. PseuDOS also now works OK with SparkFS, in that it spots SparkFS' silly inability to rename, and does a copy+delete instead.

    If you want to only have ROM 7 (typically AMSDOS) selected, use Alt-D (for disc) and then reset the CPC. If you want only ROM 6 (typically PseuTOS) use Alt-T (for tape) and then reset. This means you don't have to quit anymore to use programs which need all the memory under PseuTOS or AMSDOS. Note that PseuTOS has been altered so that it only takes 7 extra bytes when used with AMSDOS, so most programs will not need Alt-T or Alt-D (Sorcery and Batman, for example, no longer do).

    CheckDisc and CheckSnap have been enhanced such that they will normally report that a disc or snap is OK, or provide some warning or error and report the disc or snap is not OK. Pressing Shift while the programs are scanning a disc or snap will cause them to print more detailed information. Acorn have given their kind permission for me to distribute the FrontEnd module, and so !AmsToArc now has a nice desktop frontend by default.

    There's new enhanced mixed-mode handling available as an option in !CPC_Src. More details in the `Keyboard' document in the Docs subdirectory. Autofire can be enabled using Alt-F; note that this makes the F and G keys behave a bit strangely. A tweak has been added to the sound hardware enveloping fix available in !CPC_Src so that hwenv sounds last one second rather than forever. !CPC and !CPC_Src now restore (or attempt to restore) the sound system to the state it was in when they were launched.

    Now since this new version represents a very significant improvement over the previous one (especially in the area of FDC emulation, which means that a number of excellent programs now work), I've decided to change my shareware policy and ask for GBP 15 rather than suggesting an optional contribution in the range GBP 10-20.

    To thank you for your support to date, I'm reducing this expectation to GBP 10 for you! I hope you'll agree with me that this is quite a reasonable sum to ask for. You are, of course, free not to download the new version, but I would hope that if you did, you would consider that ample proof that you are interested enough in !CPC to stump up a measly tenner! Naturally, if you've already contributed GBP 10 (or more!) then I'm not expecting another cheque from you.

    Version 1996-04-14

    It improves on version 1996-03-06 in the following respects:

  • Printer support
  • More documentation
  • Quick-launch for discs
  • Support for exact emulation of Z80 block load instructions
  • Bugfixing and improving in PseuDOS
  • General bugfixing, improving and optimisation
  • CPC printer output is now supported. The configuration variable CPC$Printer defines where printer output should go. By default, this is "printer#null:", which causes printer output to be swallowed up, never to be seen again. If you have a parallel or serial printer, you can set this variable to "printer#parallel:" or "printer#serial:" respectively. If you wish to route printer output to a file, this can be done by specifying the full pathname, e.g. "ADFS::MyHD.$.Data.CPCPrint"; this file is appended to if it already exists.

    Lots more documentation has been added to the Docs subdirectory. There should now be all the information you need on how to configure !CPC to taste, and on all the non-obvious features of !CPC. If you feel some of it is unclear or insufficient, please tell me, and I will endeavour to improve it! Note that the configuration options have changed somewhat; this may cause CPCFront to fail. !CPC will now auto-configure when launched; this means that it will not get confused if you move it around (e.g. when copying it out of archive).

    If PseuTOS is loaded together with AMSDOS (see the "DOSs" document), then it redefines the Ctrl-Enter key combination to produce 'RUN"<discname>', where <discname> is the name of the currently inserted disc. This means, in particular, that if you name your discs carefully enough, then you can launch a given disc simply by double-clicking on it, and then pressing Ctrl-Enter within the emulator. Note that if you change discs within the emulator, a CPC reset will be needed before the name of the old disc is replaced by that of the new disc.

    A few programs require that Z80 block load operations be interruptable. This is now supported via the configuration option CPC$ExactBlock. If this means nothing to you, then ignore it (or see the documentation!).

    PseuDOS (and PseuTOS) have been improved and bugfixed. |DIR now works even if no argument is given. Both CAT and |DIR now display special AMSDOS characters such as '$' correctly. !AmsToArc now correctly handles AMSDOS files with special characters (see the documentation for more details), and handles ASCII files slighltly more intelligently. PseuTOS will now work properly under 464 and 664 machine types again. Resetting the CPC via Alt-Esc after a snap has been loaded will now work properly again.

    And finally... The keyboard `~ key will now actually produce `~. Sounds should now always properly terminate when !CPC is exited. ROM and RAM banking has been slightly optimised for speed. Note that Alt handling has been changed slightly: when Alt is released, any other keys currently depressed are considered to be released (this is not ideal, but is better than the previous situation, which was even more confusing!).

    Phew!

    Please tell me if you experience any problems! One user has reported that this latest version suffers from `stutter' in programs such as Sentinel and Commando, something which was not the case in the previous version. Unfortunately, I can't reproduce this on my set-up, and I can't work out why this might be happening. If you've observed something similar, please tell me, giving details of your hardware. Many thanks!

    STOP PRESS!
    The user has identified the problem as being caused by a special user-defined screen mode ey was using. So if you experience the `stutter' problem described above, try switching to a standard mode (12, 20 or 27).

    STOP THE STOPPED PRESS!
    More tests by this user have shown that the problem only happens when ey tries to use a high-resolution mode (such as MODE 20 or 27). If you've seen this, please, please, please tell me!

    Version 1996-03-06

    It improves on version 1996-02-29 in the following respects:

  • Support for changing discs in the background
  • Pause and quiet key combinations
  • ROMs can now be placed where convenient
  • You can change discs by pressing Alt-I (for insert). You'll get a catalogue of available discs, and be prompted to choose one. If you don't want to insert a new disc after all, just press return. Note that if the palette is for example all black, you won't actually be able to see anything! [Also, if you've got more than one path in your disc path, you'll as usual only get a catalogue of the first, but can still choose any disc in any of the paths.] Obviously, this is only useful if you're using AMSDOS!

    You can pause the emulator by pressing Alt-Space; press any key to continue. You can toggle sound output on and off using Alt-Q (for quiet).

    You probably don't want to know about the change in ROM placement! If you do, I'm sure you'll be able to work it out for yourself...

    This update is likely to be the last for a while. I really must try to force myself to get my #&^!%&#%!* Ph.D. thesis written up, and anyway, given the level of interest in !CPC, well...

    The following improvements are planned, if and when I have time to have a got at them:

  • Improved FDC emulation, so that e.g. CP/M and |CPM games will work.
  • Speeding-up by coding indexed Z80 instructions on their own.
  • Speeding-up by not always recomputing whether a memory read needs to come from ROM or from RAM (e.g. if one is executing a three-byte operation, it is reasonable to assume the whole instruction is either in RAM or in ROM)
  • A monitor, so you could halt the emulator, look at register and memory contents, etc.
  • Some people have expressed a desire for a multitasking version. The problem is that I know nothing about coding for the Wimp. Furthermore, the whole area of screen access would need to be rethought. So don't hold your breath here. Now if someone else wanted to have a go...

    If there are any other improvements you could think of, please tell me!

    Version 1996-02-29

    It improves on version 1996-02-19 in the following respects:

  • Improved sound handling
  • Minor bugfixing
  • Updated technical info
  • The improved sound handling should mean that very high pitched whines are no longer produced by certain programs. If you still experience problems with poor sound production at high pitches, you could try playing with the sound cutoff threshold in FreqMapCre in !CPC_Src's Support subdirectory (and tell me the results of the experiment!).

    The bugfixing relates to the program environment handlers and is unlikely to produce noticable effects. The updated tech info is in the Docs subdirectory; comments and corrections are most welcome!

    Version 1996-02-19

    It improves on version 1996-02-15 in the following respects:

  • Small but important bug found and fixed in the Z80 emulation
  • Minor improvements to the support utilities
  • The Z80 emulation bug fix means that games such as Exolon, which used to hang the host, now work fine. The problem lied in LDIR/LDDR emulation: if BC=0 on entry then this actually block copies 64K (2**16) bytes of memory (which can be used as a simple delay loop). Overlooking this meant the emulator was trying to block copy 4G (2**32) bytes of memory... (Sure you're really glad to know that!)

    !AmsToArc, CheckSnap and CheckDisc have been made slightly more user-friendly in that you can now exit all three simply by pressing Return at the prompts, and in that they will no longer sometimes close all open desktop files.

    Please note that I haven't subjected this version to all the tests I normally subject release versions to before release. This is because I produced it just before leaving for a study trip. I feel the bugfix is significant enough to warrant early release; I hope no new bugs were introduced at the same time!

    Version 1996-02-15

    It improves on version 1996-02-05 in the following respects:

  • Increased robustness
  • New technical info
  • I've gone an implemented a proper set of exit, error and upcall handlers. The practical consequences are first, that if you need to insert a (RISC OS) disc in the drive, you'll actually see the prompts (though they'll mess the display up, and so you should try to avoid causing this), and second, that if all else fails, you should be able to perform an emergency exit back to the desktop, by pressing Alt-Delete (though this'll mean you lose finalisation operations such as snap saving, and so should be similarly avoided). If the latter does not work, I really would very much like to be told!

    Would someone with a RiscPC be kind enough to tell me if the RiscPC's task killer (Alt-Break) can now be safely used to kill off !CPC?

    The new technical info can be found in the Docs subdirectory. If you find a mistake, please do tell me!

    Version 1996-02-05

    It improves on version 1996-01-29 in the following respects:

  • The Z80 emulation has been tweaked and has now been validated with the Z80 instruction set exerciser from yaze (yet another Z80 emulator), as far as documented effects are concerned
  • A bug in slowdown has been fixed
  • Improvements to !AmsToArc for non-DDE users
  • As a consequence of the slowdown fix, the value given to CPC$Slowdown is no longer assumed to be in hexadecimal in !CPC_Src. If this means nothing to you, simply prefix the value you used to use with `&' (e.g. Set CPC$Slowdown &12000). Note that, due to a bug, the value used for !CPC itself was not assumed to be in hex -- so there's no change needed there.

    You can now double-click run !AmsToArc even if you don't have the DDE (i.e. don't have the FrontEnd module). You'll still not get a nice Wimp frontend, though...

    Version 1996-01-29

    It improves on version 1996-01-21 in the following respects:

  • Snap and disc checkers are included
  • Snap saving is now also available in the pre-assembled version
  • The start to some documentation is available in the Docs subdirectory
  • General bugfixing (especially in PseuDOS)
  • Snap and disc checkers are now included, so if any snap or disc does not seem to work, you can check whether anything might be wrong with it. Simply double click on CheckSnap or CheckDisc in the Support subdirectory, and just supply the name of the snap or disc to be checked.

    Version 1996-01-21

    It improves on version 1996-01-11 in the following respects:

  • Joysticks are now supported
  • You can now change discs within the emulator, using the command |INSERT,"DSKNAME" (you can get a list of available discs using |DISCS)
  • A pre-assembled version is now available
  • Sprites have been improved and added to
  • You can double-click launch discs
  • The joystick support is for standard Acorn joysticks, as found on the A3010. If you've got a third-party joystick interface, tell it to behave like on the A3010!

    Be careful with changing discs. Make sure AMSDOS streams are closed before you attempt to change discs. A CPC reset should do the trick. In general, be careful with doing unexpected things with AMSDOS/PseuDOS, such as using a write protected disc, or a full disc -- the emulator is liable to fall over in a heap!

    The pre-assembled version should behave just like the source version (now called !CPC_Src), but should launch much faster! The only exception is snap saving, which I haven't had the time to put in.

    I hope you like the new sprites. Both lo-res and hi-res, and both full-size and small versions are provided. If you think you can do better (I realise I'm no artist), tell me!

    Discs to double-click launch should be given the filetype `CPC disc' (&065 at present).


    Instructions

    I'm afraid you'll have to wait a bit for full instructions. Here are some preliminaries to get you going:

  • If you want sound, you'll need the BBCSound module. This is present inside the !65host application supplied on the App2 disc with RISC OS up to and excluding RO3.5. If you don't have this, you can get it from the Acorn FTP site. You can dispense with all this if you turn sound off with *Set CPC$Sound 0.
  • You need to plonk the BASIC, OS and AMSDOS ROMs in the ROMs subdirectory. These ROMs can be found in the demo version of !CPC.
  • You save SNAs by pressing Shift when you exit (i.e. Alt-Shift-F12). You save screenshots by pressing Ctrl when you exit (i.e. Alt-Ctrl-F12). SNAs end up by default as the file SavedSnap in the Snaps subdirectory, and screenshots as the file ScreenDump in the same directory as !CPC. Both of these can be customised.
  • If you do look at the source code, please accept my apologies for its shortcomings. It represents many years' work, and my coding style has changed somewhat over the years. Some bits date from my early period, and so suffer from lack of documentation. Other bits are very fresh and so show signs of on-going work. And some bits are rather convoluted -- often as a result of hacks needed to get around a limitation of the orignal design. Cleaning it all up is an on-going process!

    More details as soon as I have time. Keep checking this page!


    !CPCFront

    You can now interface !CPC to !CPCFront, Nige Jones' WIMP frontend to !CPC. It's looking pretty promising. To use, copy !CPC into !CPCFront. Note !CPCFront is Copyright (C) 1996 Nige Jones, is not guaranteed, should only be used with the full version of !CPC, and should not be modified or distributed to third parties. Contact Nige directly at MCCX4NPJ@fs2.ee.umist.ac.uk for more info; you might as well subscribe to his !CPCFront mailing list (send a blank message to that address with the subject line `help' for more details).

    !CPCFront is now at version 1.00. Please read the file !Help for more information on its current status.

    There are a couple of known limitations in version 1.00. If you want to use it for !CPC, you have to execute !CPC_Src's !Boot first (one easy way is to let the filer `see' !CPC_Src first). Version 1.00 does not like multiple paths in CPCSnap$Path and CPCDisc$Path either. These limitations are being addressed!


    Here it all is!

  • Development multitasking !CPC_Src (169K).
  • Version 1996-07-28 of !CPC (42K).
  • The source for the above (200K).
  • The frontend for the above (27K).
  • The CPC6128 ROMs -- place in !CPC.ROMs (46K).
  • The links between *.ac.uk and The Rest Of The World (TM) seem to be rather poor at the moment. Perseverance should pay off in the end!

    Note that the source also contains all the documentation, and all the support programs such as !AmsToArc and the snap/disc checkers, as well as the firmware ROM images; you will need all this at least the first time, and when any of it changes.

    The executable version contains the PseuDOS and PseuTOS ROM images, but you'll have to grab the firmware ROM images from the source version (only once: they won't change!). If you know what this means, you can define CPCROM$Path and make upgrading much less painful...


    Contact details

    My snail-mail address

    Mark RISON
    113 Corrie Road
    GB - Cambridge CB1 3QQ
    UNITED KINGDOM

    My e-mail address

    mrison@acorn.co.uk
    
    Please note this is now confirmed; note the disappearance of the `art.' bit (it's the new corporate identity, you see...). Its use does not imply any sort of official or unofficial Acorn involvement with !CPC. More legalistic waffle on request. Please do not use any address @*.cam.ac.uk or @*.cern.ch anymore.

    Please disregard any different snail- or e-mail addresses you may find in program documentation, error reports, etc..


    Mark RISON, 1997-07-05, 18:00
    mrison@acorn.co.uk